#ifndef MYWROD_H
#define MYWROD_H

#include <QMainWindow>

#include<QtWidgets>

//添加相关头文件
#include<QPrintDialog>
#include<QPrinter>
#include<QPrintPreviewDialog>
#include"mychild.h"

class MyChild;
//被创建后，必须将它添加到菜单和工具栏，然后将他链接到实现的action功能的槽函数
class QAction;
//菜单栏，它是挂载在菜单栏QmenuBar(容器)上面的
class QMenu;
class QFontComboBox;
//提供一个可以同时显示多个文档容器的区域
class QMiArea;
//大多数复杂项目软件，都是使用MDI框架，QMiArea用于主容器当中，用于容纳多个子容器QMdiSubWindow
class QMdiSubWindow;
//此类专门收集一系列无参信号
class QSignalMapper;

class MyWrod : public QMainWindow
{
    Q_OBJECT


public:
    MyWrod(QWidget *parent = nullptr);

    ~MyWrod();

protected:
    //通过参数event，直接控制是否让窗口关闭
    void closeEvent(QCloseEvent *event);

private:
    void createActions();//创建菜单操作(动作)
    void createMenus();//创建菜单
    void createToolBars();//创建工具条
    void createStatusBar();//创建状态条
    void enabledText();
    void fontChanged(const QFont &f);
    void colorChanged(const QColor &c);
    //根据当前文本的对齐方式，更新界面上对齐按钮的勾选状态
    void alignmentChanged(Qt::Alignment a);
    MyChild *activeMyChild();
    QMdiSubWindow *findMyChild(const QString &fileName);

    MyChild *createMyChild();

    QMdiArea *mdiArea;//多文档窗口的窗口管理器
    QSignalMapper *windowMapper;

    //菜单栏的设计
    QMenu *fileMenu;
    QMenu *editMenu;
    QMenu *formatMenu;
    QMenu *fontMenu;
    QMenu *alignMenu;
    QMenu *windowMenu;
    QMenu *helpMenu;

    //工具栏的设计
    QToolBar *fileToolBar;
    QToolBar *editToolBar;
    QToolBar *formatToolBar;
    QToolBar *comboToolBar;
    QComboBox *comboStyle;//子控件 标准组合框
    QFontComboBox *comboFont;//子控件 字体组合框
    QComboBox *comboSize;//子控件 字体大小组合框

    //菜单动作(Action)
    QAction *newAct;
    QAction *openAct;
    QAction *saveAct;
    QAction *saveAsAct;
    QAction *printAct;
    QAction *printPreviewAct;
    QAction *exitAct;

    QAction *undoAct;
    QAction *redoAct;
    QAction *cutAct;
    QAction *copyAct;
    QAction *pasteAct;

    QAction *boldAct;
    QAction *italicAct;
    QAction *underlineAct;
    QAction *leftAlignAct;
    QAction *centerAct;
    QAction *rightAlignAct;
    QAction *justifyAct;
    QAction *colorAct;

    QAction *closeAct;
    QAction *closeAllAct;
    QAction *tileAct;
    QAction *cascadeAct;
    QAction *nextAct;
    QAction *previousAct;
    QAction *separatorAct;

    QAction *aboutAct;
    QAction *aboutQtAct;



private slots:

    void fileNew();//新建
    void fileOpen();//打开
    void fileSave();//保存
    void fileSaveAs();//另存为
    void filePrint();//打印
    void filePrintPreview();//文件打开预览


    void undo();//撤销
    void redo();//重做
    void cut();//剪切
    void copy();//复制
    void paste();//粘贴


    void textBold();
    void textItalic();
    void textUnderline();
    void textAlign(QAction *a);
    void textStyle(int styleIndex);
    void textFamily(const QString &f);
    void textSize(const QString &p);
    void textColor();

    void about();
    void aboutQt();

    void updateMenus();//更新菜单
    void updateWindowMenu();
    void setActiveSubWindow(QWidget *window);



};
#endif // MYWROD_H
